#ifndef GEOMETRIC_OBJECTS_H
#define GEOMETRIC_OBJECTS_H

#include <string>

#include "Ray.h"
#include "ShadeRec.h"
#include "RGBColor.h"
#include "BoundingBox.h"
#include "Point3D.h"
#include "Logger.h"
#include "Material.h"

class GeometricObjects
{
public:
	virtual	bool hit(Point3D o,  Point3D d, double &tmin, ShadeRec &sr) = 0;

	Engine::BoundingBox* GetBoundingBox()
	{
		return box;
	}

	virtual void MakeBoundingBox() = 0;

	GeometricObjects(){}

	RGBColor GetColor()
	{
		return color;
	}

	Engine::Material * GetMaterial()
	{
		return m_material;
	}

	void SetMaterial(Engine::Material *p_material)
	{
		m_material = p_material;
	}

	virtual Point3D GetNormal(Point3D) = 0;
	virtual void PrintObjectName() = 0;

protected:
	RGBColor color;
	Engine::Material *m_material;
	Engine::BoundingBox* box;
	string m_objectName;
};


#endif // !GEOMETRIC_OBJECTS_H
